script.Parent = owner.PlayerGui local TweenService = game:GetService("TweenService") local function New(class) return function(props) props = props or {} local inst = Instance.new(class) for prop, val in next, props do if prop ~= "Parent" then inst[prop] = val end end inst.Parent = props["Parent"] return inst end end local function lerp(a, b, x) return a + (b - a) * x end local function qbez(a, b, c, x) return lerp(lerp(a, b, x), lerp(b, c, x), x) end local function destroy(inst, time) game:GetService("Debris"):AddItem(inst, time or 0) end local char = owner.Character local torso = char:WaitForChild("Torso") local head = char:WaitForChild("Head") local params = RaycastParams.new() params.FilterDescendantsInstances = {char, workspace.Terrain} params.FilterType = Enum.RaycastFilterType.Blacklist local target = Vector3.new() local function thing(origin, pos, color, transparency, material, bounces) bounces = bounces or 0 local part = New "Part" { Color = color or Color3.new(1, 1, 1), Material = material or "Glass", Transparency = transparency or 0.3, Anchored = true, CanCollide = false, Position = origin, Size = Vector3.new(0.25, 0.25, 0.25), Massless = true, Parent = workspace.Terrain } New "SpecialMesh" { MeshType = "Sphere", Parent = part } local localized = (pos - origin) pos = origin + localized.Unit * math.clamp(localized.Magnitude, 2, 20) + Vector3.new(math.random() - math.random(),math.random() - math.random(),math.random() - math.random()) localized = (pos - origin) local point = origin + localized.Unit * localized.Magnitude * 0.5 + Vector3.new(0, 2.5, 0) local dur = (0.025 + math.random() * 0.01) * localized.Magnitude local elapsed = 0 task.delay(0, function() local prevPos = origin while true do elapsed = elapsed + task.wait() local alpha = elapsed / dur local newPos = qbez(origin, point, pos, alpha) local results = workspace:Raycast(prevPos, (newPos - prevPos), params) if results then local Sounds = {9120573607, 9120574513, 9120574671, 9120573609, 9120573219, 9120574509, 9120574154} local Splat = New "Sound" { SoundId = "rbxassetid://"..(Sounds[math.random(1,#Sounds)]); Volume = 2, Pitch = 1 * Random.new():NextNumber(0.955, 1.078); Parent = part; RollOffMaxDistance = 77; } Splat.TimePosition = Random.new():NextNumber(1, 2.3) Splat:Play() Splat.Ended:Once(function() Splat:Destroy() end) TweenService:Create(Splat, TweenInfo.new(1.5, Enum.EasingStyle.Linear), {Volume = 0}):Play() if bounces >= 1 then part.Color = Color3.new(1, 1, 1) bounces = bounces - 1 elapsed = 0 origin = results.Position pos = origin + (target - origin).Unit * math.clamp((target - origin).Magnitude, 2, 20) localized = (pos - origin) point = origin + localized.Unit * localized.Magnitude * 0.5 + Vector3.new(0, 2.5, 0) else part.CFrame = CFrame.new(results.Position, results.Position - results.Normal) TweenService:Create(part, TweenInfo.new(0.5), {Size = Vector3.new(1.5 + math.random(), 1.5 + math.random(), 0.25)}):Play() part.Anchored = false part.Parent = workspace.Terrain New "WeldConstraint" { Part0 = results.Instance, Part1 = part, Parent = part } break end end part.CFrame = CFrame.new(prevPos, newPos) part.Size = Vector3.new(0.25, 0.25, 0.25 + (newPos - prevPos).Magnitude) prevPos = newPos if elapsed >= dur * 15 then destroy(part) break end end destroy(part, 8) task.wait(6) TweenService:Create(part, TweenInfo.new(2), {Size = Vector3.new()}):Play() end) end local state = { Vomit = false, Bouncy = false } local Vomit = Instance.new("Sound", owner.Character.Head); Vomit.SoundId = 'rbxassetid://528349992' Vomit.Looped = true; Vomit.Volume = 0.8; Vomit.Pitch = 0.8575 local VomitStart = Instance.new("Sound", owner.Character.Head); VomitStart.SoundId = 'rbxassetid://9114549428' VomitStart.Volume = 0.6; VomitStart.Pitch = 2.3 local VomitStarted = false local remote = Instance.new("RemoteEvent", script) remote.OnServerEvent:Connect(function(plr, event, data) if event == "Start" then state[data] = true elseif event == "Stop" then state[data] = false elseif event == "Target" then target = data end end) local ls = NLS([[ local UserInputService = game:GetService("UserInputService") local mouse = owner:GetMouse() mouse.TargetFilter = workspace.Terrain local server = script.Parent local remote = server.RemoteEvent UserInputService.InputBegan:Connect(function(input, gameprocessed) if gameprocessed then return end local mode; local key; if input.KeyCode == Enum.KeyCode.F then mode = "Vomit" elseif input.KeyCode == Enum.KeyCode.G then mode = "Bouncy" end if mode then remote:FireServer("Start", mode) local conn;conn = input.Changed:Connect(function() if input.UserInputState == Enum.UserInputState.End then remote:FireServer("Stop", mode) conn:Disconnect() end end) end end) while true do task.wait() remote:FireServer("Target", mouse.Hit.Position) end ]], script) local Vomits = {9120584650, 9117944990, 9117940939} while true do task.wait() for i = 1,1 do if state.Vomit then local th = math.random() > 0.5 thing(head.CFrame * CFrame.new(0, -0.25, -0.5).Position, target, Color3.fromHSV(0.15 + math.random() * 0.1, 1, 0.8 + math.random() * 0.1), th and 0 or 0.3, (th and "Ground" or "Glass")) end if state.Bouncy then local th = math.random() > 0.8 thing(head.CFrame * CFrame.new(0, -0.25, -0.5).Position, target, Color3.fromHSV(.7*math.random() * 0.05, 1, .3 + math.random() * 0.1), th and 0 or 0.3, (th and "Salt" or "Glass")) end end if state.Vomit or state.Bouncy then if not VomitStarted then VomitStarted = true; VomitStart.SoundId = 'rbxassetid://'..(Vomits[math.random(1,#Vomits)]) VomitStart.Volume = 4; VomitStart:Play() end Vomit.Playing = true else if VomitStarted then VomitStarted = false; end Vomit.Playing = false end end